#include"blockqueue.hpp"
#include<stdio.h>
#include<unistd.h>
using namespace BlockQueueModule;

void* consume(void* args)
{
    //static_cast 隐式类型转换  reinterpret_cast 强制类型转换
    BlockQueue<int>* bq=reinterpret_cast<BlockQueue<int>*>(args);
    int ret;


    while(true)
    {
        
        bq->pop(&ret);
        printf("消费了个%d\n",ret);

    }
    return nullptr;

}

void* product(void* args)
{
    //static_cast 隐式类型转换  reinterpret_cast 强制类型转换
    BlockQueue<int>* bq=reinterpret_cast<BlockQueue<int>*>(args);
    int tmp=10;

    while(true)
    {
        bq->Equeue(tmp);
        printf("生产了%d\n",tmp++);
        sleep(1);

    }
    return nullptr;

}
int main()
{
    pthread_t c1,p1;//生产者和消费者都是线程
    BlockQueue<int>* bq=new BlockQueue<int>(5);//超市就是阻塞队列
    pthread_create(&c1,nullptr,consume,bq);
    pthread_create(&p1,nullptr,product,bq);//创建线程时参数设为阻塞队列，这样就是进程间通信，就能看到这个超市了

    pthread_join(c1,nullptr);
    pthread_join(p1,nullptr);
    return 0;
}
